#include <iostream>
#include <string>
#include <functional>
#include <vector>
//  function<返回值类型(参数一类型,参数二类型,...)> 函数名 = [选择值传递，引用传递等](参数类型  形参名,参数类型 形参名, ...) -> 返回值类型{
//            ... 
//   };
//参数1：绑定一个函数，参数2：传递该函数的参数，std::placeholders::_1 可以用来传递更多参数(但只能是int类型)
//bind (Fn&& fn, Arge& args,..)        

//使用案例2
void print(const std::string& str, int num)
{
    std::cout << str << num << std::endl;
}

int main()
{
    using Task = std::function<void()>; 

    std::vector<Task> array;
    
    array.push_back(std::bind(print,"hello",10));
    array.push_back(std::bind(print,"hello world",10));
    array.push_back(std::bind(print,"nihao",10));
    array.push_back(std::bind(print,"bite",10));

    for(auto & func : array)
    {
        func();
    }
    return 0;
}

//使用案例1：
// void print(const std::string& str, int num)
// {
//     std::cout << str << " " <<  num << std::endl;
// }

// int main()
// {   
//     auto func = std::bind(print,"leihou", std::placeholders::_1); //后面是bind函数预留的参数位置，可以传很多参数
//     func(100);
//     func(200);

//     return 0;
// }
